// pages/lesson/onlinecourse/onlinecourse.js
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    currentTab: 'all',
    showPriceSort: false,
    showPriceRange: false,
    priceOrder: '', // '', 'asc', 'desc'
    selectedPrice: 'all',
    courseList: [],
    pageNum: 1,
    pageSize: 10,
    loading: false,
    hasMore: true
  },

  // 获取课程列表
  getCourseList() {
    if (this.data.loading) return;
    
    this.setData({ loading: true });
    console.log('开始请求数据，页码：', this.data.pageNum);

    wx.request({
      url: 'http://localhost:8080/onlineCourses/getCourseOrderBy',
      method: 'GET',
      data: {
        pageNum: this.data.pageNum,
        pageSize: this.data.pageSize
      },
      success: (res) => {
        console.log('综合排序接口响应：', res.data);
        if (res.data.code === 1 && res.data.data.list) {
          const list = res.data.data.list.map(item => ({
            id: item.id,
            image: 'http://localhost:8080/file/downLoad?fileName=' + item.tabularchart,
            name: item.coursename,
            content: item.courseintroduce,
            price: item.discountedPrice || item.originalprice
          }));

          if (this.data.pageNum === 1) {
            // 第一页，直接设置数据
            this.setData({ courseList: list });
          } else {
            // 不是第一页，追加数据
            this.setData({
              courseList: this.data.courseList.concat(list)
            });
          }

          // 判断是否还有更多数据
          if (list.length < this.data.pageSize) {
            this.setData({ hasMore: false });
            wx.showToast({
              title: '没有更多课程了',
              icon: 'none',
              duration: 2000
            });
          }
        }
      },
      fail: (err) => {
        console.error('综合排序接口调用失败：', err);
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
        wx.hideLoading();
      }
    });
  },

  // 获取人气排序课程列表
  getCourseListByStudy() {
    if (this.data.loading) return;
    
    this.setData({ loading: true });
    console.log('开始请求人气排序数据，页码：', this.data.pageNum);

    wx.request({
      url: 'http://localhost:8080/onlineCourses/getCourseOrderByStudy',
      method: 'GET',
      data: {
        pageNum: this.data.pageNum,
        pageSize: this.data.pageSize
      },
      success: (res) => {
        console.log('人气排序接口响应：', res.data);
        if (res.data.code === 1 && res.data.data.list) {
          const list = res.data.data.list.map(item => ({
            id: item.id,
            image: 'http://localhost:8080/file/downLoad?fileName=' + item.tabularchart,
            name: item.coursename,
            content: item.courseintroduce,
            price: item.discountedPrice || item.originalprice
          }));

          if (this.data.pageNum === 1) {
            // 第一页，直接设置数据
            this.setData({ courseList: list });
          } else {
            // 不是第一页，追加数据
            this.setData({
              courseList: this.data.courseList.concat(list)
            });
          }

          // 判断是否还有更多数据
          if (list.length < this.data.pageSize) {
            this.setData({ hasMore: false });
            wx.showToast({
              title: '没有更多课程了',
              icon: 'none',
              duration: 2000
            });
          }
        }
      },
      fail: (err) => {
        console.error('人气排序接口调用失败：', err);
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
        wx.hideLoading();
      }
    });
  },

  // 获取价格排序课程列表
  getCourseListByPrice() {
    if (this.data.loading) return;
    
    this.setData({ loading: true });
    console.log('开始请求价格排序数据，页码：', this.data.pageNum);

    wx.request({
      url: 'http://localhost:8080/onlineCourses/getCourseOrderByPrice',
      method: 'GET',
      data: {
        pageNum: this.data.pageNum,
        pageSize: this.data.pageSize,
        order: this.data.priceOrder // 'asc' 或 'desc'
      },
      success: (res) => {
        console.log('价格排序接口响应：', res.data);
        if (res.data.code === 1 && res.data.data.list) {
          const list = res.data.data.list.map(item => ({
            id: item.id,
            image: 'http://localhost:8080/file/downLoad?fileName=' + item.tabularchart,
            name: item.coursename,
            content: item.courseintroduce,
            price: item.discountedPrice || item.originalprice
          }));

          if (this.data.pageNum === 1) {
            // 第一页，直接设置数据
            this.setData({ courseList: list });
          } else {
            // 不是第一页，追加数据
            this.setData({
              courseList: this.data.courseList.concat(list)
            });
          }

          // 判断是否还有更多数据
          if (list.length < this.data.pageSize) {
            this.setData({ hasMore: false });
            wx.showToast({
              title: '没有更多课程了',
              icon: 'none',
              duration: 2000
            });
          }
        }
      },
      fail: (err) => {
        console.error('价格排序接口调用失败：', err);
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
        wx.hideLoading();
      }
    });
  },

  // 获取价格降序排序课程列表
  getCourseListByPriceDesc() {
    if (this.data.loading) return;
    
    this.setData({ loading: true });
    console.log('开始请求价格降序数据，页码：', this.data.pageNum);

    wx.request({
      url: 'http://localhost:8080/onlineCourses/getCourseOrderByPriceDesc',
      method: 'GET',
      data: {
        pageNum: this.data.pageNum,
        pageSize: this.data.pageSize
      },
      success: (res) => {
        console.log('价格降序接口响应：', res.data);
        if (res.data.code === 1 && res.data.data.list) {
          const list = res.data.data.list.map(item => ({
            id: item.id,
            image: 'http://localhost:8080/file/downLoad?fileName=' + item.tabularchart,
            name: item.coursename,
            content: item.courseintroduce,
            price: item.discountedPrice || item.originalprice
          }));

          if (this.data.pageNum === 1) {
            // 第一页，直接设置数据
            this.setData({ courseList: list });
          } else {
            // 不是第一页，追加数据
            this.setData({
              courseList: this.data.courseList.concat(list)
            });
          }

          // 判断是否还有更多数据
          if (list.length < this.data.pageSize) {
            this.setData({ hasMore: false });
            wx.showToast({
              title: '没有更多课程了',
              icon: 'none',
              duration: 2000
            });
          }
        }
      },
      fail: (err) => {
        console.error('价格降序接口调用失败：', err);
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
        wx.hideLoading();
      }
    });
  },

  // 获取价格区间课程列表
  getCourseListByPriceRange() {
    if (this.data.loading) return;
    
    this.setData({ loading: true });
    console.log('开始请求价格区间数据，页码：', this.data.pageNum);

    // 根据选择的价格区间设置最小和最大价格
    let minPrice = 0;
    let maxPrice = Infinity;

    switch(this.data.selectedPrice) {
      case 'free':
        minPrice = 0;
        maxPrice = 0;
        break;
      case '50':
        minPrice = 0;
        maxPrice = 50;
        break;
      case '50-100':
        minPrice = 50;
        maxPrice = 100;
        break;
      case '100-500':
        minPrice = 100;
        maxPrice = 500;
        break;
      case '500-1000':
        minPrice = 500;
        maxPrice = 1000;
        break;
      case '1000':
        minPrice = 1000;
        maxPrice = Infinity;
        break;
      default:
        return this.getCourseList(); // 如果是'all'，则调用综合排序接口
    }

    wx.request({
      url: 'http://localhost:8080/onlineCourses/getCourseByPrice',
      method: 'GET',
      data: {
        pageNum: this.data.pageNum,
        pageSize: this.data.pageSize,
        minDiscountedPrice: minPrice,
        maxDiscountedPrice: maxPrice === Infinity ? null : maxPrice
      },
      success: (res) => {
        console.log('价格区间接口响应：', res.data);
        if (res.data.code === 1 && res.data.data.list) {
          const list = res.data.data.list.map(item => ({
            id: item.id,
            image: 'http://localhost:8080/file/downLoad?fileName=' + item.tabularchart,
            name: item.coursename,
            content: item.courseintroduce,
            price: item.discountedPrice || item.originalprice
          }));

          if (this.data.pageNum === 1) {
            // 第一页，直接设置数据
            this.setData({ courseList: list });
          } else {
            // 不是第一页，追加数据
            this.setData({
              courseList: this.data.courseList.concat(list)
            });
          }

          // 判断是否还有更多数据
          if (list.length < this.data.pageSize) {
            this.setData({ hasMore: false });
            wx.showToast({
              title: '没有更多课程了',
              icon: 'none',
              duration: 2000
            });
          }
        }
      },
      fail: (err) => {
        console.error('价格区间接口调用失败：', err);
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
        wx.hideLoading();
      }
    });
  },

  switchTab(event) {
    const tab = event.currentTarget.dataset.tab;
    // 重置所有状态
    this.setData({
      currentTab: tab,
      showPriceSort: false,
      showPriceRange: false,
      priceOrder: '',
      selectedPrice: 'all',
      pageNum: 1,
      hasMore: true,
      courseList: [],
      loading: false
    });

    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    if (tab === 'all') {
      this.getCourseList();
    } else if (tab === 'popular') {
      this.getCourseListByStudy();
    }
  },

  togglePriceSort() {
    this.setData({
      showPriceSort: !this.data.showPriceSort,
      showPriceRange: false,
      currentTab: ''
    });
  },

  togglePriceRange() {
    this.setData({
      showPriceRange: !this.data.showPriceRange,
      showPriceSort: false,
      currentTab: ''
    });
  },

  selectPriceSort(event) {
    const order = event.currentTarget.dataset.order;
    // 重置所有状态
    this.setData({
      priceOrder: order,
      showPriceSort: false,
      currentTab: '',
      selectedPrice: 'all',
      pageNum: 1,
      hasMore: true,
      courseList: [],
      loading: false
    });

    wx.showLoading({
      title: '加载中...',
      mask: true
    });
    
    if (order === 'asc') {
      this.getCourseListByPrice();
    } else if (order === 'desc') {
      this.getCourseListByPriceDesc();
    } else {
      this.getCourseList();
    }
  },

  selectPriceRange(event) {
    const price = event.currentTarget.dataset.price;
    // 重置所有状态
    this.setData({
      selectedPrice: price,
      showPriceRange: false,
      currentTab: '',
      priceOrder: '',
      pageNum: 1,
      hasMore: true,
      courseList: [],
      loading: false
    });

    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    this.getCourseListByPriceRange();
  },

  filterCourses() {
    let filteredList = [].concat(this.data.courseList);
    
    // 价格排序
    if (this.data.priceOrder) {
      filteredList.sort((a, b) => {
        return this.data.priceOrder === 'asc' ? a.price - b.price : b.price - a.price;
      });
    }

    // 价格区间筛选
    if (this.data.selectedPrice !== 'all') {
      filteredList = filteredList.filter(course => {
        switch(this.data.selectedPrice) {
          case 'free':
            return course.price === 0;
          case '50':
            return course.price < 50;
          case '50-100':
            return course.price >= 50 && course.price <= 100;
          case '100-500':
            return course.price > 100 && course.price <= 500;
          case '500-1000':
            return course.price > 500 && course.price <= 1000;
          case '1000':
            return course.price > 1000;
          default:
            return true;
        }
      });
    }

    // 其他排序逻辑（可以根据需要添加）
    switch(this.data.currentTab) {
      case 'popular':
        // 按人气排序的逻辑
        break;
      case 'rating':
        // 按好评率排序的逻辑
        break;
    }

    this.setData({ courseList: filteredList });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getCourseList();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    this.setData({
      showPriceSort: false,
      showPriceRange: false
    });
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.setData({
      currentTab: 'all',
      showPriceSort: false,
      showPriceRange: false,
      priceOrder: '',
      selectedPrice: 'all',
      pageNum: 1,
      courseList: [],
      hasMore: true
    });
    
    // 根据当前选中的tab、价格排序状态和价格区间调用对应的接口
    if (this.data.selectedPrice !== 'all') {
      this.getCourseListByPriceRange();
    } else if (this.data.priceOrder === 'asc') {
      this.getCourseListByPrice();
    } else if (this.data.priceOrder === 'desc') {
      this.getCourseListByPriceDesc();
    } else if (this.data.currentTab === 'all') {
      this.getCourseList();
    } else if (this.data.currentTab === 'popular') {
      this.getCourseListByStudy();
    }
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    if (this.data.loading || !this.data.hasMore) {
      return;
    }
    
    // 显示加载提示
    wx.showLoading({
      title: '加载中...',
      mask: true
    });
    
    this.setData({ 
      pageNum: this.data.pageNum + 1 
    });

    // 根据当前选中的tab、价格排序状态和价格区间调用对应的接口
    if (this.data.selectedPrice !== 'all') {
      this.getCourseListByPriceRange();
    } else if (this.data.priceOrder === 'asc') {
      this.getCourseListByPrice();
    } else if (this.data.priceOrder === 'desc') {
      this.getCourseListByPriceDesc();
    } else if (this.data.currentTab === 'all') {
      this.getCourseList();
    } else if (this.data.currentTab === 'popular') {
      this.getCourseListByStudy();
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 跳转到课程详情页
  navigateToCourseDetail(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/course/PsychologicalCounselorCourse/Psychological Counselor Course?id=${id}`
    });
  },

  // 排序课程列表
  sortCourseList() {
    if (this.data.courseList.length === 0) {
      return;
    }
    
    // 使用concat方法替代数组展开语法
    let filteredList = [].concat(this.data.courseList);
    
    // 根据排序方式进行排序
    if (this.data.sortType === 'priceAsc') {
      // 按价格升序排序
      filteredList.sort((a, b) => a.discountedPrice - b.discountedPrice);
    } else if (this.data.sortType === 'priceDesc') {
      // 按价格降序排序
      filteredList.sort((a, b) => b.discountedPrice - a.discountedPrice);
    } else if (this.data.sortType === 'popularity') {
      // 按人气（学习人数）排序
      filteredList.sort((a, b) => b.studyCount - a.studyCount);
    }
    
    // 更新排序后的列表
    this.setData({
      courseList: filteredList
    });
  },
})